/**
    * 发布Instagram的REELS。相对于短视频
    * 会将所有视频都集成为一个视频，如果是只发短视频的话可以。
    * TODO：将文本修改为从服务器获取的数据
    */

"app"
device.wakeUp()
const appName = "Instagram"
// 导入函数
const { randomSleep, deleteDirCache, deviceWidth, deviceHeight,jsDir,getRandomSong, getTranslateTitle,
    waitForAndClick, waitForAndSetText, exitAppAndJs,httpUploadErrMsg,device_model,
} = require("/sdcard/Download/js/config.js");
try{
    launchApp(appName)

    // 等待发布按钮出现，并等待1s之后再进行点击。
    {
        sleep(1000)
        toast("开始")
        if(!waitForAndClick(id("creation_tab"))){
            exitAppAndJs("出错脚本："+appName+"\n问题："+"点击创建失败！")
        }
        // clickById("creation_tab")
    }
    // 选择“REELS”
    {
        toast("检查是否有录制新视频")
        waitForAndClick(textContains("录制新视频"),4)
        toast("点击reels")
        if(!waitForAndClick(id("cam_dest_clips"), 2))
        {
            exitAppAndJs("出错脚本："+appName+"\n问题："+"点击reels失败！")
        }
        waitForAndClick(textContains("录制新视频"),4)
        toast("点击图库")
        waitForAndClick(descContains("快门"), 4,  desc("图库"))

        /* pre 版本 */
        // clickById("cam_dest_clips")
        // 如果是自拍页面，则点击图库
        // if(descContains("快门").exists()){
        //     desc("图库").findOne().click();
        // }
    }
    // 打开多选，并选择
    {
        var itemCount = 0;
        // 如果有草稿
        // toast("如果有草稿")
        // waitForAndClick(textContains("录制新视频"),4)
        toast("点击多选")
        if(!waitForAndClick(id("gallery_menu_multi_select_button"))){
            exitAppAndJs("出错脚本："+appName+"\n问题："+"点击多选失败！")
        }

        // 出错
        toast("多选视频")
        var resourceParent = className("GridView").findOne()
        resourceParent.children().each(function(item) {
            click(item.bounds().centerX(), item.bounds().centerY());
            itemCount ++;
            randomSleep();
        })

        /* pre 版本
        clickById("gallery_menu_multi_select_button")
        var resourceParent = className("GridView").depth(3).findOne()
        resourceParent.children().each(item =>{
            click(item.bounds().centerX(), item.bounds().centerY())
            randomSleep()
        })
        */
    }
    /**
     *  点击继续，并点击跳过
     * TODO：音乐换成从文档获取
     */
    {
        
        
        toast("点击继续")
        if(!waitForAndClick(id("media_thumbnail_tray_button"))){
            exitAppAndJs("出错脚本："+appName+"\n问题："+"点击继续失败！")
        }

        // 此处应该是添加音乐
        if(waitForAndClick(descContains("搜索音乐"))){
            while(true){
                var song = getRandomSong().split('|');
                if(song.length === 0){
                    song[0] = "My 21 Summer"
                    song[1] = "Samantha Choi"
                }
                var name = song[0]
                var author = song[1]
                toast("等待点击搜索音乐")
                waitForAndSetText(id("row_search_edit_text"), name + " " + author)
                waitForAndClick(id("row_search_edit_text"))
                click(deviceWidth-20,deviceHeight-20)
                while(descContains("正在加载").exists()){
                    sleep(1000)
                }
                waitForAndClick(id("song_title"))
            }

        }


        // 多选视频或图片后会出现，继续
        // 有时候出bug，没有音乐的时候就没有这个
        if(itemCount > 1){
            randomSleep()
            toast("点击继续")
            // 加载音频
            while(text("继续").exists()){
                toast("等待继续")
                waitForAndClick(textContains("继续"))
                sleep(1000)
            }
            
            // if(!waitForAndClick(id("secondary_footer_text_button"))){
            //     exitAppAndJs("出错脚本："+appName+"\n问题："+"")
            // }
        }

        // 若出现快门，则无法添加此片段
        if(descContains("快门").exists()){
            toastLog("快门存在")
            waitForAndClick(id("discard_clips_button"))
            waitForAndClick(textContains("重拍"))

            // 重新选择
            if(!waitForAndClick(id("gallery_menu_multi_select_button"))){
                exitAppAndJs("出错脚本："+appName+"\n问题："+"重新选择失败！")
            }
            var resourceParent = className("GridView").depth(3).findOne()
            resourceParent.children().each(item =>{
                click(item.bounds().centerX(), item.bounds().centerY())
                itemCount ++;
                randomSleep()
            })
        }
        
        /* pre 版本
        clickById("media_thumbnail_tray_button")
        clickById("secondary_footer_text_button")
        */
    }
    /**
     * 添加音乐并且点击下一步 
     */ 
    {
        var song = getRandomSong().split('|');
        if(song.length === 0){
            song[0] = "My 21 Summer"
            song[1] = "Samantha Choi"
        }
        var musicName = song[0]
        var musicAuthor = song[1]
        // 添加音乐
        if(device_model === "9"){
            if(waitForAndClick(id("audio_mixing_button"),3)){
                toastLog("存在音乐")
                if(!waitForAndClick(id("row_search_edit_text"))){
                    exitAppAndJs("出错脚本："+appName+"\n问题："+"点击音乐搜索框失败！")
                }
                if(!waitForAndSetText(id("row_search_edit_text"), musicName+" "+musicAuthor)){
                    exitAppAndJs("出错脚本："+appName+"\n问题："+"设置音乐搜索文本失败！")
                }
                sleep(5000)
                var list = id("track_container").find()
                list.forEach(item => {
                    if(item.findOne(descContains(musicName))){
                        
                        waitForAndClick(id("track_container"), 1, item.findOne(descContains(musicName)))
                    }
                });
            
                desc("完成").clickable().waitFor()
                waitForAndClick(desc("完成"))
            
                // 持续点击下一步，若一直存在则一直点，等到处理结束
                while(waitForAndClick(id("clips_right_action_button"))){
                    
                }
            // 如果没有音乐
            }else{
                toastLog("不存在音乐")
                if(!waitForAndClick(id("clips_right_action_button"))){
                    exitAppAndJs("出错脚本："+appName+"\n问题："+"无音乐，点击下一步失败！")
                }
            }
        }else{
            sleep(5000)
            log("搜索音乐")
            if(id("clips_action_bar_volume_controls_button").exists()){
                id("clips_action_bar_volume_controls_button").click()
                log("存在音乐")
                toastLog("存在音乐")
                if(!waitForAndSetText(id("row_search_edit_text"), musicName+" "+musicAuthor)){
                    exitAppAndJs("出错脚本："+appName+"\n问题："+"设置音乐搜索文本失败！")
                }

                if(!waitForAndClick(id("row_search_edit_text"))){
                    exitAppAndJs("出错脚本："+appName+"\n问题："+"点击音乐搜索框失败！")
                }
                
                sleep(2000)
                // 切换键盘
                click(10*deviceWidth / 11 ,24*deviceHeight / 25);

                sleep(2000)
                if(!textContains("清除").exists()){
                    toast("是系统键盘")
                }else{
                    toast("不是系统键盘")
                    // click(10*deviceWidth / 11 ,24*deviceHeight / 25);
                    // sleep(2000)

                    click(10*deviceWidth / 11 ,15*deviceHeight / 16);

                    sleep(1000);
                    click(deviceWidth /2 ,(deviceHeight / 2 -60));

                    sleep(5000)
                    click(10*deviceWidth / 11 ,24*deviceHeight / 25);
                    sleep(2000)
                }
                
                if(textContains("找不到").exists()){
                    waitForAndClick(descContains("返回"))
                    sleep(1000)
                    click(random(400,700), random(1400, 1500))
                }else{
                    click(random(400,700), random(300, 480))
                }

                waitForAndClick(descContains("完成"))
            
                // 持续点击下一步，若一直存在则一直点，等到处理结束
                while(waitForAndClick(id("clips_right_action_button"))){
                    randomSleep()
                }
            // 如果没有音乐
            }else{
                toastLog("不存在音乐")
                if(!waitForAndClick(id("clips_right_action_button"))){
                    exitAppAndJs("出错脚本："+appName+"\n问题："+"无音乐，点击下一步失败！")
                }
            }
        }
        
        
        // clickById("clips_right_action_button");
    }


    /**
     * 点击下一步
     */
    {
        // if(!waitForAndClick(id("clips_right_action_button"))){
        //     exitAppAndJs("出错脚本："+appName+"\n问题："+"")
        // }
    }


    // 添加说明和标题
    // TODO：将文本修改为从服务器获取的数据
    {
        var strText = getTranslateTitle();
        if(!waitForAndSetText(id("caption_input_text_view"), strText)){
            exitAppAndJs("出错脚本："+appName+"\n问题："+"设置说明文本失败！")
        }
        // inputById("caption_input_text_view", "这是一条测试视频！！");
    }
    /**
     * 点击分享，若出现关于Reels，则点击分享
     */
    {
        if(!waitForAndClick(id("share_button"))){
            exitAppAndJs("出错脚本："+appName+"\n问题："+"点击发布失败！")
        }
        waitForAndClick(text("关于 Reels"), 2, id("clips_nux_sheet_share_button"))
        // clickById("share_button");
        // if(text("关于 Reels").exists()){
        //     if(id("clips_nux_sheet_share_button").exists()){
        //         id("clips_nux_sheet_share_button").click()
        //     }else{
        //         desc("分享").click()
        //     }
        // }
    }
    // 等待上传结束，每隔2s检测一次是否上传结束
    {
        randomSleep()
        while(textContains("草稿").exists()){
            sleep(5000)
        }
        // REELS
        while(id("bb_primary_action_container").exists()){
            toastLog("上传未结束")
            sleep(5000);
        }
        // 帖子
        while(id("row_pending_container").exists()){
            toastLog("上传未结束")
            sleep(5000);
        }
        // REELS
        while(id("upload_snackbar_container").exists()){
            toastLog("上传未结束")
            sleep(5000);
        }
        toastLog("上传结束!");
        randomSleep()
    }

    /**
     * 删除上传后的缓存
     */
    {
        deleteDirCache(appName)
    }

    /**
     * 写入成功执行的文件
     */
    {
        files.createWithDirs(jsDir + "finish")
    }

    // 关闭后台
    exitAppAndJs()

    /**
     * *************************************
     * ************ 函数部分 ****************
     * *************************************
     */

    /**
     * @废弃
     * 通过id点击
     * @param {string} click_id
     */
    function clickById(click_id){
        randomSleep()
        if(id(click_id).exists()){
            var btn = id(click_id).findOne();
            click(btn.bounds().centerX(), btn.bounds().centerY())
            randomSleep()
        }
    
    }

}catch(e){
    log("出错："+e)
    httpUploadErrMsg("脚本执行错误："+appName+" => "+e)
}